package com.seek.util;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.sinovatech.common.config.GlobalConfig;

/**
 * 上传非商品类图片至又拍云
 * <p>
 * 注意：直接使用部分图片处理功能后，将会丢弃原图保存处理后的图片
 */
public class UpHeadImgToUpyun {

	// 运行前先设置好以下三个参数
	private static final String BUCKET_NAME = GlobalConfig.getProperty("main", "headimg_cdn_bucket_name");
	private static final String OPERATOR_NAME = GlobalConfig.getProperty("main", "headimg_cdn_operate_name");
	private static final String OPERATOR_PWD = GlobalConfig.getProperty("main", "headimg_cdn_operate_pwd");

	/** 绑定的域名 */
	private static final String URL = GlobalConfig.getProperty("main", "headimg_cdn_url");

	/** 根目录 */
	private static final String DIR_ROOT = "/";

	private static UpYun upyun = null;

//	public static void main(String[] args) throws Exception {
//
//		// 初始化空间
//		upyun = new UpYun(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);
//
//		// ****** 可选设置 begin ******
//
//		// 切换 API 接口的域名接入点，默认为自动识别接入点
//		// upyun.setApiDomain(UpYun.ED_AUTO);
//
//		// 设置连接超时时间，默认为30秒
//		// upyun.setTimeout(60);
//
//		// 设置是否开启debug模式，默认不开启
//		upyun.setDebug(false);
//
//		// ****** 可选设置 end ******
//
//		/*
//		 * 一般性操作参考文件空间的demo（FileBucketDemo.java）
//		 * 
//		 * 注：图片的所有参数均可以自由搭配使用
//		 */
//
//		// 1.上传文件（文件内容）
//		testWriteFile();
//
//		// 2.图片做缩略图；若使用了该功能，则会丢弃原图
//		testGmkerl();
//
//		// 3.图片旋转；若使用了该功能，则会丢弃原图
//		testRotate();
//
//		// 4.图片裁剪；若使用了该功能，则会丢弃原图
//		testCrop();
//
//	}
	
	private static void initUpYun(){
		// 初始化空间
		upyun = new UpYun(BUCKET_NAME, OPERATOR_NAME, OPERATOR_PWD);

		// 设置是否开启debug模式，默认不开启
		upyun.setDebug(false);
	}

	/**
	 * 上传文件，返回上传文件的路径
	 * 
	 * @throws IOException
	 */
	public static String writeFile(File file) throws IOException {
		initUpYun();
		String srcFileName = file.getName();
		
//		// 临时文件存放地址:
//		String upload2 = FileConstantsUtil.UPLOAD_DIR_TEMP;
//		upload2 = upload2 + "/" + new SimpleDateFormat("yyyyMMdd").format(new Date());
//		upload2 = FileUtil._getDestDir(upload2) + "/" + srcFileName;
//		File file = new File(upload2);
//		originfile.transferTo(file);
						
		// 要传到upyun后的文件路径：/yyyyMMdd/xxx.xx
		String md5key = UpYun.md5(file);
		String suffix = srcFileName.substring(srcFileName.lastIndexOf(".") + 1);
		String filePath = DIR_ROOT + new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/" + md5key + "." + suffix;

		// 设置待上传文件的 Content-MD5 值
		// 如果又拍云服务端收到的文件MD5值与用户设置的不一致，将回报 406 NotAcceptable 错误
		upyun.setContentMD5(md5key);

		// 上传文件，并自动创建父级目录（最多10级）
		if (upyun.writeFile(filePath, file, true))
			return URL + filePath;
		else
			return "";
	}

//	/**
//	 * 图片做缩略图
//	 * <p>
//	 * 注意：若使用了缩略图功能，则会丢弃原图
//	 * 
//	 * @throws IOException
//	 */
//	public static void testGmkerl() throws IOException {
//
//		// 要传到upyun后的文件路径
//		String filePath = DIR_ROOT + "gmkerl.jpg";
//
//		// 本地待上传的图片文件
//		File file = new File(SAMPLE_PIC_FILE);
//
//		// 设置缩略图的参数
//		Map<String, String> params = new HashMap<String, String>();
//
//		// 设置缩略图类型，必须搭配缩略图参数值（KEY_VALUE）使用，否则无效
//		params.put(PARAMS.KEY_X_GMKERL_TYPE.getValue(),
//				PARAMS.VALUE_FIX_BOTH.getValue());
//
//		// 设置缩略图参数值，必须搭配缩略图类型（KEY_TYPE）使用，否则无效
//		params.put(PARAMS.KEY_X_GMKERL_VALUE.getValue(), "150x150");
//
//		// 设置缩略图的质量，默认 95
//		params.put(PARAMS.KEY_X_GMKERL_QUALITY.getValue(), "95");
//
//		// 设置缩略图的锐化，默认锐化（true）
//		params.put(PARAMS.KEY_X_GMKERL_UNSHARP.getValue(), "true");
//
//		// 若在 upyun 后台配置过缩略图版本号，则可以设置缩略图的版本名称
//		// 注意：只有存在缩略图版本名称，才会按照配置参数制作缩略图，否则无效
//		params.put(PARAMS.KEY_X_GMKERL_THUMBNAIL.getValue(), "small");
//
//		// 上传文件，并自动创建父级目录（最多10级）
//		boolean result = upyun.writeFile(filePath, file, true, params);
//
//		System.out.println(filePath + " 制作缩略图" + isSuccess(result));
//		System.out.println("可以通过该路径来访问图片：" + URL + filePath);
//		System.out.println();
//	}
//
//	/**
//	 * 图片旋转
//	 * 
//	 * @throws IOException
//	 */
//	public static void testRotate() throws IOException {
//
//		// 要传到upyun后的文件路径
//		String filePath = DIR_ROOT + "rotate.jpg";
//
//		// 本地待上传的图片文件
//		File file = new File(SAMPLE_PIC_FILE);
//
//		// 图片旋转功能具体可参考：http://wiki.upyun.com/index.php?title=图片旋转
//		Map<String, String> params = new HashMap<String, String>();
//
//		// 设置图片旋转：只接受"auto"，"90"，"180"，"270"四种参数
//		params.put(PARAMS.KEY_X_GMKERL_ROTATE.getValue(),
//				PARAMS.VALUE_ROTATE_90.getValue());
//
//		// 上传文件，并自动创建父级目录（最多10级）
//		boolean result = upyun.writeFile(filePath, file, true, params);
//
//		System.out.println(filePath + " 图片旋转" + isSuccess(result));
//		System.out.println("可以通过该路径来访问图片：" + URL + filePath);
//		System.out.println();
//	}
//
//	/**
//	 * 图片裁剪
//	 * 
//	 * @throws IOException
//	 */
//	public static void testCrop() throws IOException {
//
//		// 要传到upyun后的文件路径
//		String filePath = DIR_ROOT + "crop.jpg";
//
//		// 本地待上传的图片文件
//		File file = new File(SAMPLE_PIC_FILE);
//
//		// 图片裁剪功能具体可参考：http://wiki.upyun.com/index.php?title=图片裁剪
//		Map<String, String> params = new HashMap<String, String>();
//
//		// 设置图片裁剪，参数格式：x,y,width,height
//		params.put(PARAMS.KEY_X_GMKERL_CROP.getValue(), "50,50,300,300");
//
//		// 上传文件，并自动创建父级目录（最多10级）
//		boolean result = upyun.writeFile(filePath, file, true, params);
//
//		System.out.println(filePath + " 图片裁剪" + isSuccess(result));
//		System.out.println("可以通过该路径来访问图片：" + URL + filePath);
//		System.out.println();
//	}

//	private static String isSuccess(boolean result) {
//		return result ? " 成功" : " 失败";
//	}
}